home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / SerialPanel.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  17KB  |  707 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  17.             GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  18.             GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_SATISFY_ODU,GAD_USE_OWNDEVUNIT,GAD_RELEASE_WHEN_ONLINE,
  19.             GAD_RELEASE_WHEN_DIALING,GAD_NO_ODU_IF_SHARED,GAD_USE,GAD_CANCEL,
  20.             GAD_PAGER,GAD_PAGEGROUP,GAD_DIRECT_CONNECTION
  21.         };
  22.  
  23. STATIC LONG Sizes[] =
  24. {
  25.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  26. };
  27.  
  28. STATIC LONG SAVE_DS STACKARGS
  29. ShowSerialSize(struct Gadget *UnusedGadget,LONG Level)
  30. {
  31.     return(Sizes[Level]);
  32. }
  33.  
  34. STATIC LONG SAVE_DS ASM
  35. RateHookFunc(REG(a0) struct Hook *UnusedHook,REG(a2) LONG Current,REG(a1) LONG Command)
  36. {
  37.     LONG Index;
  38.  
  39.     if(Current < BaudRates[0])
  40.         Current = BaudRates[Index = 0];
  41.     else
  42.     {
  43.         if(Current > BaudRates[NumBaudRates - 1])
  44.             Current = BaudRates[Index = NumBaudRates - 1];
  45.         else
  46.         {
  47.             LONG i;
  48.  
  49.             Index = -1;
  50.  
  51.             for(i = 0 ; i < NumBaudRates ; i++)
  52.             {
  53.                 if(Current == BaudRates[i])
  54.                 {
  55.                     switch(Command)
  56.                     {
  57.                         case INCREMENTERMSG_Decrement:
  58.  
  59.                             if(i > 0)
  60.                                 return(BaudRates[i - 1]);
  61.                             else
  62.                                 return(Current);
  63.  
  64.                         case INCREMENTERMSG_Increment:
  65.  
  66.                             if(i < NumBaudRates - 1)
  67.                                 return(BaudRates[i + 1]);
  68.                             else
  69.                                 return(Current);
  70.  
  71.                         default:
  72.  
  73.                             return(Current);
  74.                     }
  75.                 }
  76.             }
  77.  
  78.             if(Index == -1)
  79.             {
  80.                 if(Command == INCREMENTERMSG_Decrement)
  81.                 {
  82.                     for(i = 0 ; i < NumBaudRates ; i++)
  83.                     {
  84.                         if(BaudRates[i] <= Current)
  85.                             Index = i;
  86.                     }
  87.  
  88.                     if(BaudRates[Index] < Current || !Index)
  89.                         return(BaudRates[Index]);
  90.                     else
  91.                         return(BaudRates[Index - 1]);
  92.                 }
  93.                 else
  94.                 {
  95.                     for(i = NumBaudRates - 1 ; i >= 0 ; i--)
  96.                     {
  97.                         if(BaudRates[i] >= Current)
  98.                             Index = i;
  99.                     }
  100.  
  101.                     if(Command == INCREMENTERMSG_Initial)
  102.                     {
  103.                         if(Index == -1)
  104.                             return(Current);
  105.                         else
  106.                             return(BaudRates[Index]);
  107.                     }
  108.                     else
  109.                     {
  110.                         if(BaudRates[Index] > Current || Index == NumBaudRates - 1)
  111.                             return(BaudRates[Index]);
  112.                         else
  113.                             return(BaudRates[Index + 1]);
  114.                     }
  115.                 }
  116.             }
  117.         }
  118.     }
  119.  
  120.     if(Index == -1 || (Command != INCREMENTERMSG_Decrement && Command != INCREMENTERMSG_Increment))
  121.         return(Current);
  122.     else
  123.     {
  124.         if(Command == INCREMENTERMSG_Decrement)
  125.         {
  126.             if(Index > 0)
  127.                 return(BaudRates[Index - 1]);
  128.             else
  129.                 return(BaudRates[Index]);
  130.         }
  131.         else
  132.         {
  133.             if(Index < NumBaudRates - 1)
  134.                 return(BaudRates[Index + 1]);
  135.             else
  136.                 return(BaudRates[Index]);
  137.         }
  138.     }
  139. }
  140.  
  141. BOOL
  142. SerialPanel(struct Window *Parent,struct Configuration *LocalConfig)
  143. {
  144.     STATIC struct Hook IncrementerHook;
  145.  
  146.     STATIC LONG PageTitleID[5] =
  147.     {
  148.         MSG_V36_0171,
  149.         MSG_V36_0179,
  150.         MSG_V36_0176,
  151.         MSG_ODU_SUPPORT_TXT,
  152.         -1
  153.     };
  154.  
  155.     STATIC BYTE InitialPage = 0;
  156.  
  157.     LayoutHandle *Handle;
  158.     STRPTR PageLabels[5];
  159.     BOOL UseIt;
  160.  
  161.     UseIt = FALSE;
  162.  
  163.     InitHook(&IncrementerHook,(HOOKFUNC)RateHookFunc,NULL);
  164.  
  165.     memset(PageLabels,0,sizeof(PageLabels));
  166.  
  167.     LocalizeStringTable(PageLabels,PageTitleID);
  168.  
  169.     if(!OwnDevUnitBase)
  170.     {
  171.         PageLabels[3] = NULL;
  172.  
  173.         if(InitialPage >= 3)
  174.             InitialPage = 2;
  175.     }
  176.  
  177.     SaveConfig(LocalConfig,PrivateConfig);
  178.  
  179.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  180.         LAHN_LocaleHook,    &LocaleHook,
  181.         LAHN_ExitFlush,        FALSE,
  182.     TAG_DONE))
  183.     {
  184.         struct Window *PanelWindow;
  185.         LONG Size,Quantum,i;
  186.  
  187.         for(i = 4 ; i < NUM_ELEMENTS(Sizes) ; i++)
  188.         {
  189.             if(Sizes[i] <= PrivateConfig->SerialConfig->SerialBufferSize)
  190.                 Size = i;
  191.         }
  192.  
  193.         for(i = 0 ; i < NUM_ELEMENTS(Sizes) ; i++)
  194.         {
  195.             if(Sizes[i] <= PrivateConfig->SerialConfig->Quantum)
  196.                 Quantum = i;
  197.         }
  198.  
  199.         if(PrivateConfig->SerialConfig->HighSpeed)
  200.         {
  201.             PrivateConfig->SerialConfig->BitsPerChar    = 8;
  202.             PrivateConfig->SerialConfig->StopBits        = 1;
  203.             PrivateConfig->SerialConfig->Parity            = PARITY_NONE;
  204.         }
  205.  
  206.         LT_New(Handle,
  207.             LA_Type,VERTICAL_KIND,
  208.         TAG_DONE);
  209.         {
  210.             LT_New(Handle,
  211.                 LA_Type,VERTICAL_KIND,
  212.             TAG_DONE);
  213.             {
  214.                 LT_New(Handle,
  215.                     LA_Type,        TAB_KIND,
  216.                     LA_ID,            GAD_PAGER,
  217.                     LA_LabelID,        MSG_XFER_PAGE_TXT,
  218.                     GTCY_Labels,    PageLabels,
  219.                     LACY_AutoPageID,GAD_PAGEGROUP,
  220.                     LACY_TabKey,    TRUE,
  221.                     LA_BYTE,        &InitialPage,
  222.                     LATB_FullWidth,    TRUE,
  223.                 TAG_DONE);
  224.  
  225.                 LT_EndGroup(Handle);
  226.             }
  227.  
  228.             LT_New(Handle,
  229.                 LA_Type,        VERTICAL_KIND,
  230.                 LA_ID,            GAD_PAGEGROUP,
  231.                 LAGR_ActivePage,InitialPage,
  232.             TAG_DONE);
  233.             {
  234.                 LT_New(Handle,
  235.                     LA_Type,VERTICAL_KIND,
  236.                 TAG_DONE);
  237.                 {
  238.                     LT_New(Handle,
  239.                         LA_Type,                INTEGER_KIND,
  240.                         LA_LabelID,                MSG_SERIALPANEL_BAUD_RATE_GAD,
  241.                         LA_LONG,                &PrivateConfig->SerialConfig->BaudRate,
  242.                         LA_ID,                    GAD_BAUD,
  243.                         GTIN_MaxChars,            8,
  244.                         LAIN_Min,                0,
  245.                         LAIN_UseIncrementers,    TRUE,
  246.                         LAIN_IncrementerHook,    &IncrementerHook,
  247.                     TAG_DONE);
  248.  
  249.                     LT_New(Handle,
  250.                         LA_Type,                SliderType,
  251.                         LA_ID,                    GAD_DATABITS,
  252.                         LA_LabelID,                MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  253.                         LA_BYTE,                &PrivateConfig->SerialConfig->BitsPerChar,
  254.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  255.                         GTSL_Min,                7,
  256.                         GTSL_Max,                8,
  257.                     TAG_DONE);
  258.  
  259.                     LT_New(Handle,
  260.                         LA_Type,                CYCLE_KIND,
  261.                         LA_ID,                    GAD_PARITY,
  262.                         LA_LabelID,                MSG_SERIALPANEL_PARITY_GAD,
  263.                         LA_BYTE,                &PrivateConfig->SerialConfig->Parity,
  264.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  265.                         LACY_FirstLabel,        MSG_SERIALPANEL_NO_PARITY_TXT,
  266.                         LACY_LastLabel,            MSG_SERIALPANEL_SPACE_TXT,
  267.                     TAG_DONE);
  268.  
  269.                     LT_New(Handle,
  270.                         LA_Type,                SliderType,
  271.                         LA_ID,                    GAD_STOPBITS,
  272.                         LA_LabelID,                MSG_SERIALPANEL_STOP_BITS_GAD,
  273.                         LA_BYTE,                &PrivateConfig->SerialConfig->StopBits,
  274.                         GA_Disabled,            PrivateConfig->SerialConfig->HighSpeed,
  275.                         GTSL_Min,                1,
  276.                         GTSL_Max,                2,
  277.                     TAG_DONE);
  278.  
  279.                     LT_New(Handle,
  280.                         LA_Type,                CYCLE_KIND,
  281.                         LA_LabelID,                MSG_SERIALPANEL_HANDSHAKING_GAD,
  282.                         LA_BYTE,                &PrivateConfig->SerialConfig->HandshakingProtocol,
  283.                         LACY_FirstLabel,        MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  284.                         LACY_LastLabel,            MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  285.                     TAG_DONE);
  286.  
  287.                     LT_New(Handle,
  288.                         LA_Type,                CHECKBOX_KIND,
  289.                         LA_LabelID,                MSG_SERIALPANEL_LOCAL_ECHO_GAD,
  290.                         LA_BYTE,                &PrivateConfig->SerialConfig->Duplex,
  291.                     TAG_DONE);
  292.  
  293.                     LT_New(Handle,
  294.                         LA_Type,                SliderType,
  295.                         LA_LabelID,                MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  296.                         LA_LONG,                &Size,
  297.                         GTSL_Min,                4,
  298.                         GTSL_Max,                NUM_ELEMENTS(Sizes) - 1,
  299.                         GTSL_DispFunc,            ShowSerialSize,
  300.                         GTSL_LevelFormat,        LocaleBase ? "%7lD" : "%7ld",
  301.                     TAG_DONE);
  302.  
  303.                     LT_New(Handle,
  304.                         LA_Type,                INTEGER_KIND,
  305.                         LA_LabelID,                MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  306.                         LA_LONG,                &PrivateConfig->SerialConfig->BreakLength,
  307.                         GTIN_MaxChars,            8,
  308.                     TAG_DONE);
  309.  
  310.                     LT_New(Handle,
  311.                         LA_Type,                CHECKBOX_KIND,
  312.                         LA_LabelID,                MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  313.                         LA_BYTE,                &PrivateConfig->SerialConfig->HighSpeed,
  314.                         LA_ID,                    GAD_HIGHSPEED,
  315.                     TAG_DONE);
  316.  
  317.                     LT_EndGroup(Handle);
  318.                 }
  319.  
  320.                 LT_New(Handle,
  321.                     LA_Type,VERTICAL_KIND,
  322.                 TAG_DONE);
  323.                 {
  324.                     LT_New(Handle,
  325.                         LA_Type,                STRING_KIND,
  326.                         LA_LabelID,                MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  327.                         LA_Chars,                20,
  328.                         LA_STRPTR,                PrivateConfig->SerialConfig->SerialDevice,
  329.                         GTST_MaxChars,            sizeof(PrivateConfig->SerialConfig->SerialDevice) - 1,
  330.                         LAST_Picker,            TRUE,
  331.                         LA_ID,                    GAD_DEVICE,
  332.                     TAG_DONE);
  333.  
  334.                     LT_New(Handle,
  335.                         LA_Type,                INTEGER_KIND,
  336.                         LA_LabelID,                MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  337.                         LA_LONG,                &PrivateConfig->SerialConfig->UnitNumber,
  338.                         LA_ID,                    GAD_UNIT,
  339.                         LAIN_UseIncrementers,    TRUE,
  340.                         GTIN_MaxChars,            8,
  341.                     TAG_DONE);
  342.  
  343.                     LT_EndGroup(Handle);
  344.                 }
  345.  
  346.                 LT_New(Handle,
  347.                     LA_Type,VERTICAL_KIND,
  348.                 TAG_DONE);
  349.                 {
  350.                     LT_New(Handle,
  351.                         LA_Type,            CHECKBOX_KIND,
  352.                         LA_LabelID,            MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  353.                         LA_BYTE,            &PrivateConfig->SerialConfig->StripBit8,
  354.                     TAG_DONE);
  355.  
  356.                     LT_New(Handle,
  357.                         LA_Type,            CHECKBOX_KIND,
  358.                         LA_LabelID,            MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  359.                         LA_BYTE,            &PrivateConfig->SerialConfig->Shared,
  360.                         LA_ID,                GAD_SHARED,
  361.                     TAG_DONE);
  362.  
  363.                     LT_New(Handle,
  364.                         LA_Type,            CHECKBOX_KIND,
  365.                         LA_LabelID,            MSG_SERIALPANEL_XON_XOFF_GAD,
  366.                         LA_BYTE,            &PrivateConfig->SerialConfig->xONxOFF,
  367.                     TAG_DONE);
  368.  
  369.                     LT_New(Handle,
  370.                         LA_Type,            CHECKBOX_KIND,
  371.                         LA_LabelID,            MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  372.                         LA_BYTE,            &PrivateConfig->SerialConfig->PassThrough,
  373.                     TAG_DONE);
  374.  
  375.                     LT_New(Handle,
  376.                         LA_Type,            CHECKBOX_KIND,
  377.                         LA_LabelID,            MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  378.                         LA_BYTE,            &PrivateConfig->SerialConfig->CheckCarrier,
  379.                         GA_Disabled,        PrivateConfig->SerialConfig->DirectConnection,
  380.                         LA_ID,                GAD_CHECK_CARRIER,
  381.                     TAG_DONE);
  382.  
  383.                     LT_New(Handle,
  384.                         LA_Type,            CHECKBOX_KIND,
  385.                         LA_LabelID,            MSG_DIRECT_CONNECTION_GAD,
  386.                         LA_BYTE,            &PrivateConfig->SerialConfig->DirectConnection,
  387.                         LA_ID,                GAD_DIRECT_CONNECTION,
  388.                     TAG_DONE);
  389.  
  390.                     LT_New(Handle,
  391.                         LA_Type,            SliderType,
  392.                         LA_LabelID,            MSG_SERIALPANEL_QUANTUM_GAD,
  393.                         LA_LONG,            &Quantum,
  394.                         LA_Chars,            6,
  395.                         GTSL_Min,            0,
  396.                         GTSL_Max,            NUM_ELEMENTS(Sizes) - 1,
  397.                         GTSL_Level,            Quantum,
  398.                         GTSL_DispFunc,        ShowSerialSize,
  399.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  400.                     TAG_DONE);
  401.  
  402.                     LT_EndGroup(Handle);
  403.                 }
  404.  
  405.                 LT_New(Handle,
  406.                     LA_Type,VERTICAL_KIND,
  407.                 TAG_DONE);
  408.                 {
  409.                     LT_New(Handle,
  410.                         LA_Type,VERTICAL_KIND,
  411.                     TAG_DONE);
  412.                     {
  413.                         LT_New(Handle,
  414.                             LA_Type,            CHECKBOX_KIND,
  415.                             LA_LabelID,            MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  416.                             LA_BYTE,            &PrivateConfig->SerialConfig->UseOwnDevUnit,
  417.                             LA_ID,                GAD_USE_OWNDEVUNIT,
  418.                             LA_LabelPlace,        PLACE_Right,
  419.                         TAG_DONE);
  420.  
  421.                         LT_New(Handle,
  422.                             LA_Type,            CHECKBOX_KIND,
  423.                             LA_LabelID,            MSG_DO_NOT_USE_IF_DEVICE_IS_IN_SHARED_MODE_TXT,
  424.                             LA_BYTE,            &PrivateConfig->SerialConfig->NoODUIfShared,
  425.                             LA_ID,                GAD_NO_ODU_IF_SHARED,
  426.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  427.                             LA_LabelPlace,        PLACE_Right,
  428.                         TAG_DONE);
  429.  
  430.                         LT_New(Handle,
  431.                             LA_Type,            CHECKBOX_KIND,
  432.                             LA_LabelID,            MSG_RELEASE_DEVICE_WHEN_ONLINE_TXT,
  433.                             LA_BYTE,            &PrivateConfig->SerialConfig->ReleaseODUWhenOnline,
  434.                             LA_ID,                GAD_RELEASE_WHEN_ONLINE,
  435.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  436.                             LA_ExtraSpace,        TRUE,
  437.                             LA_LabelPlace,        PLACE_Right,
  438.                         TAG_DONE);
  439.  
  440.                         LT_New(Handle,
  441.                             LA_Type,            CHECKBOX_KIND,
  442.                             LA_LabelID,            MSG_RELEASE_DEVICE_WHEN_DIALING_TXT,
  443.                             LA_BYTE,            &PrivateConfig->SerialConfig->ReleaseODUWhenDialing,
  444.                             LA_ID,                GAD_RELEASE_WHEN_DIALING,
  445.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  446.                             LA_LabelPlace,        PLACE_Right,
  447.                         TAG_DONE);
  448.  
  449.                         LT_New(Handle,
  450.                             LA_Type,            MX_KIND,
  451.                             LA_LabelID,            MSG_SATISFY_ODU_TXT,
  452.                             LA_BYTE,            &PrivateConfig->SerialConfig->SatisfyODURequests,
  453.                             LA_ID,                GAD_SATISFY_ODU,
  454.                             LACY_FirstLabel,    MSG_SATISFY_ODU_MODE1_TXT,
  455.                             LACY_LastLabel,        MSG_SATISFY_ODU_MODE3_TXT,
  456.                             GA_Disabled,        !PrivateConfig->SerialConfig->UseOwnDevUnit,
  457.                             LA_ExtraSpace,        TRUE,
  458.                         TAG_DONE);
  459.  
  460.                         LT_EndGroup(Handle);
  461.                     }
  462.  
  463.                     LT_EndGroup(Handle);
  464.                 }
  465.  
  466.                 LT_EndGroup(Handle);
  467.             }
  468.  
  469.             LT_New(Handle,
  470.                 LA_Type,VERTICAL_KIND,
  471.             TAG_DONE);
  472.             {
  473.                 LT_New(Handle,
  474.                     LA_Type,        XBAR_KIND,
  475.                     LAXB_FullSize,    TRUE,
  476.                 TAG_DONE);
  477.  
  478.                 LT_EndGroup(Handle);
  479.             }
  480.  
  481.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  482.                 LAGR_SameSize,    TRUE,
  483.                 LAGR_Spread,    TRUE,
  484.             TAG_DONE);
  485.             {
  486.                 LT_New(Handle,
  487.                     LA_Type,        BUTTON_KIND,
  488.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  489.                     LA_ID,            GAD_USE,
  490.                     LABT_ReturnKey,    TRUE,
  491.                     LABT_ExtraFat,    TRUE,
  492.                 TAG_DONE);
  493.  
  494.                 LT_New(Handle,
  495.                     LA_Type,        BUTTON_KIND,
  496.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  497.                     LA_ID,            GAD_CANCEL,
  498.                     LABT_EscKey,    TRUE,
  499.                     LABT_ExtraFat,    TRUE,
  500.                 TAG_DONE);
  501.  
  502.                 LT_EndGroup(Handle);
  503.             }
  504.  
  505.             LT_EndGroup(Handle);
  506.         }
  507.  
  508.         if(PanelWindow = LT_Build(Handle,
  509.             LAWN_TitleID,        MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT,
  510.             LAWN_HelpHook,        &GuideHook,
  511.             LAWN_Parent,        Parent,
  512.             WA_DepthGadget,        TRUE,
  513.             WA_DragBar,            TRUE,
  514.             WA_RMBTrap,            TRUE,
  515.             WA_Activate,        TRUE,
  516.             WA_SimpleRefresh,    TRUE,
  517.         TAG_DONE))
  518.         {
  519.             struct IntuiMessage    *Message;
  520.             struct Gadget *MsgGadget;
  521.             ULONG MsgClass;
  522.             UWORD MsgCode;
  523.             BOOL Done;
  524.  
  525.             GuideContext(CONTEXT_SERIAL);
  526.  
  527.             PushWindow(PanelWindow);
  528.  
  529.             LT_ShowWindow(Handle,TRUE);
  530.  
  531.             Done = FALSE;
  532.  
  533.             do
  534.             {
  535.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  536.                     break;
  537.  
  538.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  539.                 {
  540.                     MsgClass    = Message->Class;
  541.                     MsgCode        = Message->Code;
  542.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  543.  
  544.                     LT_ReplyIMsg(Message);
  545.  
  546.                     if(MsgClass == IDCMP_GADGETUP)
  547.                     {
  548.                         switch(MsgGadget->GadgetID)
  549.                         {
  550.                             case GAD_USE_OWNDEVUNIT:
  551.  
  552.                                 LT_SetAttributes(Handle,GAD_SATISFY_ODU,
  553.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  554.                                 TAG_DONE);
  555.  
  556.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_ONLINE,
  557.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  558.                                 TAG_DONE);
  559.  
  560.                                 LT_SetAttributes(Handle,GAD_RELEASE_WHEN_DIALING,
  561.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  562.                                 TAG_DONE);
  563.  
  564.                                 LT_SetAttributes(Handle,GAD_NO_ODU_IF_SHARED,
  565.                                     GA_Disabled,!PrivateConfig->SerialConfig->UseOwnDevUnit,
  566.                                 TAG_DONE);
  567.  
  568.                                 break;
  569.  
  570.                             case GAD_HIGHSPEED:
  571.  
  572.                                 if(MsgCode)
  573.                                 {
  574.                                     LT_SetAttributes(Handle,GAD_PARITY,
  575.                                         GA_Disabled,    TRUE,
  576.                                         GTCY_Active,    PARITY_NONE,
  577.                                     TAG_DONE);
  578.  
  579.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  580.                                         GA_Disabled,    TRUE,
  581.                                         GTCY_Active,    0,
  582.                                     TAG_DONE);
  583.  
  584.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  585.                                         GA_Disabled,    TRUE,
  586.                                         GTCY_Active,    1,
  587.                                     TAG_DONE);
  588.                                 }
  589.                                 else
  590.                                 {
  591.                                     LT_SetAttributes(Handle,GAD_PARITY,
  592.                                         GA_Disabled,    FALSE,
  593.                                     TAG_DONE);
  594.  
  595.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  596.                                         GA_Disabled,    FALSE,
  597.                                     TAG_DONE);
  598.  
  599.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  600.                                         GA_Disabled,    FALSE,
  601.                                     TAG_DONE);
  602.                                 }
  603.  
  604.                                 break;
  605.  
  606.                             case GAD_DIRECT_CONNECTION:
  607.  
  608.                                 LT_SetAttributes(Handle,GAD_CHECK_CARRIER,
  609.                                     GA_Disabled,    MsgCode,
  610.                                 TAG_DONE);
  611.  
  612.                                 break;
  613.  
  614.                             case GAD_USE:
  615.  
  616.                                 LT_UpdateStrings(Handle);
  617.  
  618.                                 PrivateConfig->SerialConfig->SerialBufferSize    = Sizes[Size];
  619.                                 PrivateConfig->SerialConfig->Quantum            = Sizes[Quantum];
  620.  
  621.                                 UseIt = Done = TRUE;
  622.  
  623.                                 break;
  624.  
  625.                             case GAD_CANCEL:
  626.  
  627.                                 Done = TRUE;
  628.                                 break;
  629.  
  630.                             case GAD_DEVICE:
  631.  
  632.                                 FindLibDev(PanelWindow,LT_GetString(Handle,MsgGadget->GadgetID),NT_DEVICE,NULL);
  633.                                 break;
  634.                         }
  635.                     }
  636.  
  637.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget->GadgetID == GAD_DEVICE)
  638.                     {
  639.                         UBYTE LocalBuffer[MAX_FILENAME_LENGTH],DummyBuffer[MAX_FILENAME_LENGTH];
  640.  
  641.                         LT_LockWindow(PanelWindow);
  642.  
  643.                         strcpy(DummyBuffer,LT_GetString(Handle,GAD_DEVICE));
  644.                         strcpy(LocalBuffer,DummyBuffer);
  645.  
  646.                         if(PickFile(PanelWindow,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),LocalBuffer,NT_DEVICE))
  647.                         {
  648.                             if(Stricmp(DummyBuffer,LocalBuffer))
  649.                             {
  650.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,LocalBuffer,TAG_DONE);
  651.  
  652.                                 FindLibDev(PanelWindow,LocalBuffer,NT_DEVICE,NULL);
  653.                             }
  654.                         }
  655.  
  656.                         LT_UnlockWindow(PanelWindow);
  657.  
  658.                         LT_ShowWindow(Handle,TRUE);
  659.                     }
  660.                 }
  661.             }
  662.             while(!Done);
  663.  
  664.             PopWindow();
  665.         }
  666.  
  667.         LT_DeleteHandle(Handle);
  668.     }
  669.  
  670.     if(UseIt)
  671.     {
  672.         if(Config->MiscConfig->ProtectiveMode)
  673.         {
  674.             if(PrivateConfig->SerialConfig->BaudRate >= 4800 && PrivateConfig->SerialConfig->HandshakingProtocol == HANDSHAKING_NONE && !PrivateConfig->SerialConfig->DirectConnection)
  675.             {
  676.                 if(ShowRequest(Window,LocaleString(MSG_NO_RTSCTS_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),PrivateConfig->SerialConfig->BaudRate))
  677.                     PrivateConfig->SerialConfig->HandshakingProtocol = HANDSHAKING_RTSCTS_DSR;
  678.             }
  679.         }
  680.  
  681.             /* Is the device driver closed up and is the main
  682.              * program making the call?
  683.              */
  684.  
  685.         if(LocalConfig == Config && !ReadRequest)
  686.         {
  687.                 /* Is the serial configuration any different?
  688.                  * If not, zap the serial device name in the
  689.                  * alternate buffer to force the driver to
  690.                  * get reopened.
  691.                  */
  692.  
  693.             if(!CompareConfigEntries(Config->SerialConfig,PrivateConfig->SerialConfig,PREF_SERIAL))
  694.                 Config->SerialConfig->SerialDevice[0] = 0;
  695.         }
  696.     }
  697.  
  698.         /* The edited settings are now in PrivateConfig */
  699.  
  700.     if(UseIt)
  701.         SwapConfig(LocalConfig,PrivateConfig);
  702.     else
  703.         SaveConfig(LocalConfig,PrivateConfig);
  704.  
  705.     return(UseIt);
  706. }
  707.